package com.tanguy.user.net.socket

import com.google.gson.Gson
import com.google.gson.JsonObject
import com.tanguy.user.App.Companion.app
import com.tanguy.user.Const
import com.tanguy.user.bean.orde.TripOrder
import com.tanguy.user.utlis.RxBus
import com.tanguy.user.utlis.extend.getDeviceId
import com.tanguy.user.utlis.extend.loge
import org.json.JSONObject

/**
 * Created by dab on 2017/11/27 0027 11:20
 * Socket通讯管理类
 */

object SocketManager {
    /**
     * 心跳
     */
    fun ping() {
        if (app.user.userId <= 0) return
        val jsonObject = JsonObject()
        jsonObject.addProperty("id", app.user.userId)
        jsonObject.addProperty("role", 1)
        jsonObject.addProperty("method", Const.SocketType.OK)
        jsonObject.addProperty("token", app.getDeviceId())
        app.sendMassage(jsonObject.toString())
    }

    /**
     * 解析服务端发送过来的json
     */
    fun parseJson(json: String) {
        val jsonObject = JSONObject(json)
        val code = jsonObject.get("code")?.toString()
        if (code.isNullOrEmpty() || code != "0") return
        val method = jsonObject.get("method")?.toString()
        if (method.isNullOrEmpty()) return
        val con = jsonObject.get("con")?.toString()
        dispense(method!!, con)
        //日志  过滤掉经常发的
        if (method == Const.SocketType.OK //心跳
//                || method == Const.SocketType.DRIVER_LINEUP //在排队区域
//                || method == Const.SocketType.LINEUP_ZHONG //排队号码
                ) return
        loge(json)
    }

    /**
     * 分发消息
     */
    private fun dispense(method: String, con: String?) {
        when (method) {
            Const.SocketType.OK -> return
            Const.SocketType.USER_ORDER_PAY -> orderPay(con) //支付宝等支付成功
            Const.SocketType.USER_ORDER_GRAB -> orderGrab(con) //司机接单 推给用户的
            Const.SocketType.USER_ORDER_SETOF -> orderSetof(con) //司机出发前往预约地点 推给用户的
            Const.SocketType.USER_ORDER_ARRIVE -> orderSetof(con) //司机到达预约地点 推给用户的
            Const.SocketType.USER_ORDER_BEGIN -> orderSetof(con) //司机开始服务 推给用户的
            Const.SocketType.USER_ORDER_ORVER -> orderSetof(con) //司机送达乘客 推给用户的

            else -> {
                loge(method + con)
            }

        }


    }

    /**
     * 订单状态改变
     */
    private fun orderSetof(con: String?) {
        if (con.isNullOrEmpty()) return
        val tripOrder = Gson().fromJson<TripOrder>(con, TripOrder::class.java)
        RxBus.instance.post(Const.RxType.USER_ORDER_STATE, tripOrder)
    }

    /**
     * 抢单
     */
    private fun orderGrab(con: String?) {
        if (con.isNullOrEmpty()) return
        val tripOrder = Gson().fromJson<TripOrder>(con, TripOrder::class.java)
        RxBus.instance.post(Const.RxType.ORDER_GRAB, tripOrder)
    }

    /**
     * 支付
     */
    private fun orderPay(con: String?) {
        if (con.isNullOrEmpty()) return
        RxBus.instance.post(Const.RxType.ORDER_PAY, con!!)
    }


}
